package controllers;

import static controllers.Util.data;
import static java.lang.String.format;

import java.util.List;

import models.Aluno;
import play.db.jpa.GenericModel;
import play.mvc.Before;
import play.mvc.Controller;

public class Alunos extends Controller {

	@Before
	static void checkUser() {
		if (!Application.connected().isDefined()) {
			flash.error("Please log in first");
			Application.index();
		}
	}

	public static void formCadastroAluno() {
		render();
	}

	public static void cadastrarAluno(Aluno aluno, String dd, String mm,
			String yyyy) {
		aluno.pessoa.dataNascimento = data(dd, mm, yyyy);
		aluno.pessoa.save();
		aluno.save();
		flash.success(format("O Aluno, %s foi cadastrado com sucesso!",
				aluno.pessoa.nome));
		formCadastroAluno();
	}

	public static void buscarAlunos(String parametro, String campo) {
		final List<Aluno> alunos;
		if ("nome".equalsIgnoreCase(parametro)) {
			alunos = Aluno.find(
					"select a from Aluno a where a.pessoa.nome like '" + campo
							+ "%' order by a.pessoa.nome").fetch();
		} else if ("cpf".equalsIgnoreCase(parametro)) {
			alunos = Aluno
					.find("select a from Aluno a where a.pessoa.cpfTitular= ? order by a.pessoa.nome",
							campo).fetch();
		} else {
			alunos = Aluno.findAll();
		}
		render(alunos);
	}

	public static void formAtualizarAluno(Long idAluno, Long idPessoa) {

		final Aluno aluno = Aluno.findById(idAluno);

		@SuppressWarnings("deprecation")
		final int dia = aluno.pessoa.dataNascimento.getDate();
		@SuppressWarnings("deprecation")
		final int mes = aluno.pessoa.dataNascimento.getMonth();
		@SuppressWarnings("deprecation")
		final int ano = aluno.pessoa.dataNascimento.getYear() + 1900;

		render(aluno, idAluno, idPessoa, dia, mes, ano);
	}

	public static void atualizarAluno(Aluno aluno, String dd, String mm,
			String yyyy) {
		aluno.pessoa.dataNascimento = data(dd, mm, yyyy);
		aluno.pessoa.save();
		aluno.save();
		flash.success(format("O Aluno, %s foi atualizado com sucesso!",
				aluno.pessoa.nome));
		buscarAlunos();
	}

	private static void buscarAlunos() {
		buscarAlunos(null, null);

	}

	public static void excluirAluno(Long id) {
		final Aluno aluno = Aluno.findById(id);
		aluno.delete();
		buscarAlunos();
	}
}